#include <fstream>
#include <iostream>
#include <vector>

#define CANT_GRAFOS 20
//#define CANT_ARCH   12

using namespace std;

struct tecnica
{
    int cantCruces;
    int contador;
    int sumador;
};

//void actualizarContadores(vector<tecnica>& cruces);
int minimo(vector<tecnica> cruces);

int main()
{
	//const char *nombreArchivo_1 = "Tp3Grasp1.out";
	//const char *nombreArchivo_2 = "Tp3Grasp2.out";
	const char *nombreArchivo_3 = "Tp3golosoMM.out";
	const char *nombreArchivo_4 = "Tp3golosoAA.out";
	const char *nombreArchivo_5 = "Tp3golosoMA.out";
	const char *nombreArchivo_6 = "Tp3golosoMiMi.out";
	const char *nombreArchivo_7 = "Tp3golosoMiM.out";
	const char *nombreArchivo_8 = "Tp3goloso3MM.out";
	const char *nombreArchivo_9 = "Tp3goloso3AA.out";
	const char *nombreArchivo_10 = "Tp3goloso3MA.out";
	const char *nombreArchivo_11 = "Tp3goloso3MiMi.out";
	const char *nombreArchivo_12 = "Tp3goloso3MiM.out";
	const char *nombreArchivo_13 = "Tp3golosoHeur.out";
	const char *nombreArchivo_14 = "Tp3goloso3Heur.out";
	const char *nombreArchivo_15 = "Tp3golosoE1.out";

	//ifstream entrada1(nombreArchivo_1);
	//ifstream entrada2(nombreArchivo_2);
	ifstream entrada3(nombreArchivo_3);
	ifstream entrada4(nombreArchivo_4);
	ifstream entrada5(nombreArchivo_5);
	ifstream entrada6(nombreArchivo_6);
	ifstream entrada7(nombreArchivo_7);
	ifstream entrada8(nombreArchivo_8);
	ifstream entrada9(nombreArchivo_9);
	ifstream entrada10(nombreArchivo_10);
	ifstream entrada11(nombreArchivo_11);
	ifstream entrada12(nombreArchivo_12);
	ifstream entrada13(nombreArchivo_13);
	ifstream entrada14(nombreArchivo_14);
	ifstream entrada15(nombreArchivo_15);

	ofstream informe("informe.txt");

    int i,j,iguales = 0,min;

    tecnica t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15;
    t1.contador = 0;t2.contador = 0;t3.contador = 0;t4.contador = 0;t5.contador = 0;t6.contador = 0;
    t7.contador = 0;t8.contador = 0;t9.contador = 0;t10.contador = 0;t11.contador = 0;t12.contador = 0;
    t13.contador = 0;t14.contador = 0;t15.contador = 0;

    t1.sumador = 0;t2.sumador = 0;t3.sumador = 0;t4.sumador = 0;t5.sumador = 0;t6.sumador = 0;
    t7.sumador = 0;t8.sumador = 0;t9.sumador = 0;t10.sumador = 0;t11.sumador = 0;t12.sumador = 0;
    t13.sumador = 0;t14.sumador = 0;t15.sumador = 0;

	int maxLength = 1500;
    char basura[maxLength];

	for (i=0;i<CANT_GRAFOS;i++)
	{
	    vector<tecnica> cruces;
		//entrada1 >> t1.cantCruces;
		//cruces.push_back(t1);
		//entrada2 >> t2.cantCruces;
		//cruces.push_back(t2);
		entrada3 >> t3.cantCruces;
		t3.sumador += t3.cantCruces;
		cruces.push_back(t3);
		entrada4 >> t4.cantCruces;
		t4.sumador += t4.cantCruces;
		cruces.push_back(t4);
		entrada5 >> t5.cantCruces;
		t5.sumador += t5.cantCruces;
		cruces.push_back(t5);
		entrada6 >> t6.cantCruces;
		t6.sumador += t6.cantCruces;
		cruces.push_back(t6);
		entrada7 >> t7.cantCruces;
		t7.sumador += t7.cantCruces;
		cruces.push_back(t7);
		entrada8 >> t8.cantCruces;
		t8.sumador += t8.cantCruces;
		cruces.push_back(t8);
		entrada9 >> t9.cantCruces;
		t9.sumador += t9.cantCruces;
		cruces.push_back(t9);
		entrada10 >> t10.cantCruces;
		t10.sumador += t10.cantCruces;
		cruces.push_back(t10);
		entrada11 >> t11.cantCruces;
		t11.sumador += t11.cantCruces;
		cruces.push_back(t11);
		entrada12 >> t12.cantCruces;
		t12.sumador += t12.cantCruces;
		cruces.push_back(t12);
		entrada13 >> t13.cantCruces;
		t13.sumador += t13.cantCruces;
		cruces.push_back(t13);
		entrada14 >> t14.cantCruces;
		t14.sumador += t14.cantCruces;
		cruces.push_back(t14);
		entrada15 >> t15.cantCruces;
		t15.sumador += t15.cantCruces;
		cruces.push_back(t15);

		//actualizarContadores(cruces);
        min = minimo(cruces);
//        if (t1.cantCruces == min)
//           t1.contador++;
//        if (t2.cantCruces == min)
//            t2.contador++;
        if (t3.cantCruces == min)
            t3.contador++;
        if (t4.cantCruces == min)
            t4.contador++;
        if (t5.cantCruces == min)
            t5.contador++;
        if (t6.cantCruces == min)
            t6.contador++;
        if (t7.cantCruces == min)
            t7.contador++;
        if (t8.cantCruces == min)
            t8.contador++;
        if (t9.cantCruces == min)
            t9.contador++;
        if (t10.cantCruces == min)
            t10.contador++;
        if (t11.cantCruces == min)
            t11.contador++;
        if (t12.cantCruces == min)
            t12.contador++;
        if (t13.cantCruces == min)
            t13.contador++;
        if (t14.cantCruces == min)
            t14.contador++;
        if (t15.cantCruces == min)
            t15.contador++;
		/*if (t1.cantCruces > t2.cantCruces)
            t1.contador++;
        else
        {
            if (t1.cantCruces < t2.cantCruces)
                t2.contador++;
            else
                iguales++;
        }*/


		//entrada1.getline(basura,maxLength);
		//entrada1.getline(basura,maxLength);
		//entrada1.getline(basura,maxLength);
		//entrada2.getline(basura,maxLength);
		//entrada2.getline(basura,maxLength);
		//entrada2.getline(basura,maxLength);
		entrada3.getline(basura,maxLength);
		entrada3.getline(basura,maxLength);
		entrada3.getline(basura,maxLength);
		entrada4.getline(basura,maxLength);
		entrada4.getline(basura,maxLength);
		entrada4.getline(basura,maxLength);
		entrada5.getline(basura,maxLength);
		entrada5.getline(basura,maxLength);
		entrada5.getline(basura,maxLength);
		entrada6.getline(basura,maxLength);
		entrada6.getline(basura,maxLength);
		entrada6.getline(basura,maxLength);
		entrada7.getline(basura,maxLength);
		entrada7.getline(basura,maxLength);
		entrada7.getline(basura,maxLength);
		entrada8.getline(basura,maxLength);
		entrada8.getline(basura,maxLength);
		entrada8.getline(basura,maxLength);
		entrada9.getline(basura,maxLength);
		entrada9.getline(basura,maxLength);
		entrada9.getline(basura,maxLength);
		entrada10.getline(basura,maxLength);
		entrada10.getline(basura,maxLength);
		entrada10.getline(basura,maxLength);
		entrada11.getline(basura,maxLength);
		entrada11.getline(basura,maxLength);
		entrada11.getline(basura,maxLength);
		entrada12.getline(basura,maxLength);
		entrada12.getline(basura,maxLength);
		entrada12.getline(basura,maxLength);
		entrada13.getline(basura,maxLength);
		entrada13.getline(basura,maxLength);
		entrada13.getline(basura,maxLength);
		entrada14.getline(basura,maxLength);
		entrada14.getline(basura,maxLength);
		entrada14.getline(basura,maxLength);
		entrada15.getline(basura,maxLength);
		entrada15.getline(basura,maxLength);
		entrada15.getline(basura,maxLength);

	}
	informe << CANT_GRAFOS << " grafos" << endl;
	informe << endl;
	cout << CANT_GRAFOS << " grafos" << endl;
	cout << endl;
	//informe << "Grasp 1: " << contador_1 << endl;
	//cout << "Grasp 1: " << contador_1 << endl;
	//informe << "Grasp 2: " << contador_2 << endl;
	//cout << "Grasp 2: " << contador_2 << endl;
	informe << "GolosoMM: " << t3.contador << endl;
	informe << "GolosoMM: " << (float)t3.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoMM: " << t3.contador << endl;

	informe << "GolosoAA: " << t4.contador << endl;
	informe << "GolosoAM: " << (float)t4.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoAA: " << t4.contador << endl;

	informe << "GolosoMA: " << t5.contador << endl;
	informe << "GolosoMA: " << (float)t5.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoMA: " << t5.contador << endl;

	informe << "GolosoMiMi: " << t6.contador << endl;
	informe << "GolosoMiMi: " << (float)t6.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoMiMi: " << t6.contador << endl;

	informe << "GolosoMiM: " << t7.contador << endl;
	informe << "GolosoMiM: " << (float)t7.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoMiM: " << t7.contador << endl;

	informe << "Goloso3MM: " << t8.contador << endl;
	informe << "Goloso3MM: " << (float)t8.sumador/CANT_GRAFOS << endl << endl;
	cout << "Goloso3MM: " << t8.contador << endl;

	informe << "Goloso3AA: " << t9.contador << endl;
	informe << "Goloso3AA: " << (float)t9.sumador/CANT_GRAFOS << endl << endl;
	cout << "Goloso3AA: " << t9.contador << endl;

	informe << "Goloso3MA: " << t10.contador << endl;
	informe << "Goloso3MA: " << (float)t10.sumador/CANT_GRAFOS << endl << endl;
	cout << "Goloso3MA: " << t10.contador << endl;

	informe << "Goloso3MiMi: " << t11.contador << endl;
	informe << "Goloso3MiMi: " << (float)t11.sumador/CANT_GRAFOS << endl << endl;
	cout << "Goloso3MiMi: " << t11.contador << endl;

	informe << "Goloso3MiM: " << t12.contador << endl;
	informe << "Goloso3MiM: " << (float)t12.sumador/CANT_GRAFOS << endl << endl;
	cout << "Goloso3MiM: " << t12.contador << endl;

	informe << "GolosoHeur: " << t13.contador << endl;
	informe << "GolosoHeur: " << (float)t13.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoHeur: " << t13.contador << endl;

    informe << "Goloso3Heur: " << t14.contador << endl;
    informe << "Goloso3Heur: " << (float)t14.sumador/CANT_GRAFOS << endl << endl;
	cout << "Goloso3Heur: " << t14.contador << endl;

	informe << "GolosoE1: " << t15.contador << endl;
	informe << "GolosoE1: " << (float)t15.sumador/CANT_GRAFOS << endl << endl;
	cout << "GolosoE1: " << t15.contador << endl;

	//entrada1.close();
	//entrada2.close();
	entrada3.close();
	entrada4.close();
	entrada5.close();
	entrada6.close();
	entrada7.close();
	entrada8.close();
	entrada9.close();
	entrada10.close();
	entrada11.close();
	entrada12.close();
	entrada13.close();
	entrada14.close();
	entrada15.close();
	informe.close();

	return 0;
}

/*void actualizarContadores(vector<tecnica>& cruces)
{
	int min,i;
	min = minimo(cruces);
	for (i=0;i<cruces.size();i++)
	{
		if (cruces.at(i)->cantCruces == min)
			cruces.at(i)->contador++;
	}
}*/
int minimo(vector<tecnica> cruces)
{
	int i,min=cruces.at(0).cantCruces;
	for (i=1;i<cruces.size();i++)
	{
		if (cruces.at(i).cantCruces < min)
			min = cruces.at(i).cantCruces;
	}
	return min;
}
